package org.example.common.ticket.impl;//package com.njwx.yq.common.ticket.impl;
//
//import cn.hutool.json.JSONUtil;
//import com.google.common.cache.Cache;
//import com.google.common.cache.CacheBuilder;
//import org.example.common.bean.CommonException;
//import org.example.common.enums.ErrorEnum;
//import org.example.common.bean.ResponseBean;
//import org.example.common.feign.config.OauthProperties;
//import org.example.common.feign.inner.jiangsu.oauth.Oauth2TokenDto;
//import org.example.common.feign.inner.jiangsu.oauth.OauthFeign;
//import org.example.common.ticket.TicketService;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.boot.context.properties.EnableConfigurationProperties;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.PostConstruct;
//import javax.annotation.Resource;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.Objects;
//import java.util.concurrent.TimeUnit;
//
///**
// * 按Client id/secret刷新票据.
// *
// * @author ZhangMingmin
// * @since 2023-12-04 11:43
// */
//@Service
//@Slf4j
//@EnableConfigurationProperties({OauthProperties.class})
//public class TicketServiceImpl implements TicketService {
//    @Resource
//    private OauthFeign oauthFeign;
//
//    @Resource
//    private OauthProperties oauthProperties;
//
//    private static Cache<String, String> TOKEN_CACHE;
//    private static final String TOKEN_PREFIX = "TOKEN:";
//
//    @PostConstruct
//    public void initCache() {
//        TOKEN_CACHE = CacheBuilder.newBuilder().maximumSize(3)
//                .expireAfterWrite(3000, TimeUnit.SECONDS)
//                .build();
//
//    }
//
//    @Override
//    public String initForTicket() {
//        Map<String, String> map = new HashMap<>(8);
//        map.put("client_id", oauthProperties.getClientId());
//        map.put("client_secret", oauthProperties.getClientSecret());
//        map.put("grant_type", oauthProperties.getGrantType());
//
//        long start = System.currentTimeMillis();
//        ResponseBean<Oauth2TokenDto> responseBean = oauthFeign.docLogin(map);
//        long stop = System.currentTimeMillis();
//        log.info("获取票据耗时：{}ms，票据信息：{}", stop - start, JSONUtil.toJsonStr(responseBean));
//        String ticket = StringUtils.EMPTY;
//        if (!Objects.equals(responseBean.getCode(), ErrorEnum.SUCCESS.getErrorCode())) {
//            log.error("获取票据接口错误,错误code {},错误信息 {}", responseBean.getCode(), responseBean.getMessage());
//            throw new CommonException("生成票据失效:" + responseBean.getMessage());
//        }
//        if (responseBean.getData() != null) {
//            Oauth2TokenDto data = responseBean.getData();
//            ticket = data.getTokenType() + data.getToken();
//        }
//        return ticket;
//    }
//
//    @Override
//    public String getCurrentTicket() {
//        String cacheToken = TOKEN_CACHE.getIfPresent(TOKEN_PREFIX);
//        if (StringUtils.isEmpty(cacheToken)) {
//            //缓存失效,重新生成token并缓存
//            String genToken = initForTicket();
//            TOKEN_CACHE.put(TOKEN_PREFIX, genToken);
//            return genToken;
//        }
//        //缓存未失效,直接返回缓存
//        return cacheToken;
//    }
//}
